package com.rede.didiok.user.modulelist.file.service;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.multipart.MultipartFile;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.rede.didiok.common.dto.admin.SystemConfigDto;
import com.rede.didiok.common.dto.file.FileDto;
import com.rede.didiok.common.service.SuperService;
import com.rede.didiok.user.modulelist.file.dto.QiNiuCallback.QiNiuAuditCallback;
import com.rede.didiok.user.modulelist.file.entity.FileEntity;

/**
 * 文件服务类
 *
 */
public interface FileService extends SuperService<FileEntity> {

    /***************************** admin:start **************************/
    // region  didiok-admin

    // endregion
    /***************************** admin:end **************************/



    /***************************** web:start **************************/
    // region didiok-web

    /**
     * 截图上传
     *
     * @param multipartFile
     * @return
     */
    String cropperPicture(MultipartFile multipartFile);

    /**
     * 获取用户最近上传的文件
     * @return
     */
    IPage<FileEntity> getUserRecentlyUploadFile(FileDto fileVO);

    /**
     * 通过fileIds获取图片信息
     *
     * @param fileIds
     * @param code
     * @return
     */
    String getPicture(String fileIds, String code);

    /**
     * 批量文件上传
     *
     * @param request
     * @param multipartFileList
     * @param systemConfig
     * @return
     */
    String batchUploadFile(HttpServletRequest request, List<MultipartFile> multipartFileList, SystemConfigDto systemConfig);

    /**
     * 上传视频文件
     *
     * @param request
     * @param file
     * @param systemConfig
     * @return
     */
    String uploadVideoFile(HttpServletRequest request, MultipartFile file, SystemConfigDto systemConfig);

    /**
     * 通过URL上传图片
     *
     * @param fileVO
     * @return
     */
    String uploadPictureByUrl(FileDto fileVO);

    // endregion
    /***************************** web:end **************************/

    /**
     * CKeditor图像中的图片上传
     *
     * @param request
     * @return
     */
    Object ckeditorUploadFile(HttpServletRequest request);

    /**
     * CKeditor上传 复制的图片
     *
     * @return
     */
    Object ckeditorUploadCopyFile();

    /**
     * 工具栏 “插入\编辑超链接”的文件上传
     *
     * @return
     */
    Object ckeditorUploadToolFile(HttpServletRequest request);

    /**
     * 通过md5码获取文件
     * @param md5
     * @return
     */
    FileEntity getFileByMd5(String md5, SystemConfigDto systemConfig);

    /**
     * 获取文件列表
     * @param fileDto
     * @return
     */
    IPage<FileEntity> getFileList(FileDto fileDto);

    /**
     * 批量删除源文件
     * @param fileUidList
     * @return
     */
    String batchDeleteFile(List<String> fileUidList);

    /**
     * 七牛云审核文件
     * @param qiNiuAuditCallback
     * @return
     */
    String qiNiuAuditCallback(QiNiuAuditCallback qiNiuAuditCallback);

    /**
     * 查询指定条件下的文件列表
     * @param fileDto
     * @return
     */
    IPage<FileEntity> getFilePage(FileDto fileDto);

    /**
     * 根据 fileUidList 查询文件
     * @param fileUidList
     * @return
     */
    List<FileEntity> listFileByUids(List<String> fileUidList);


    /**
     * 批量删除源文件
     * @param systemConfigDto
     * @return
     */
    String batchDeleteBySystemConfig(SystemConfigDto systemConfigDto);
}
